# models.py
from django.db import models

"""

常见报错处理：

python manage.py migrate
python manage.py makemigrations TestModel  
python manage.py migrate TestModel

一、如果执行以上命令时会出现如下报错信息:
    'mysqlclient 1.4.0 or newer is required; you have %s.' % Database.__version__

    原因是 MySQLclient 目前只支持到 Python3.4，因此如果使用的更高版本的 python，需要修改如下：

    通过报错信息的文件路径找到 ...site-packages\Django-2.0-py3.6.egg\django\db\backends\mysql 
    里的 base.py 文件，把这两行代码注释掉（代码在文件开头部分）：

    if version < (1, 3, 13):
        raise ImproperlyConfigured('mysqlclient 1.3.13 or newer is required; you have %s.' % Database.__version__)


二、如果出现以下报错信息:
    AttributeError: 'str' object has no attribute 'decode'

    点报错的代码文件路径，跳转到报错文件中行数，在报错的代码行数之前加上
    query = query.encode()

"""

"""
CharField（相当于varchar）
DateField（相当于datetime）
IntegerField（相当于int）
"""


# 简单模型
class Test(models.Model):
    """
    类名代表了数据库表名，且继承了models.Model，
    类里面的字段代表数据表中的字段(name)，
    数据类型由 max_length 参数限定长度

    表名组成结构为：应用名_类名（如：TestModel_test）。
    注意：尽管我们没有在 models 给表设置主键，但是 Django 会自动添加一个 id 作为主键
    """
    name = models.CharField(max_length=20)


class Contact(models.Model):
    name = models.CharField(max_length=200)
    age = models.IntegerField(default=0)
    email = models.EmailField()

    def __unicode__(self):
        return self.name


# 复杂模型
class Tag(models.Model):
    """
    Contact:联系人，主表
    Tag:标签，以 Contact 为外键。一个 Contact 可以对应多个 Tag。
    """
    contact = models.ForeignKey(Contact, on_delete=models.CASCADE, )
    name = models.CharField(max_length=50)

    def __unicode__(self):
        return self.name
